﻿//2444. 统计定界子数组的数目
//给你一个整数数组 nums 和两个整数 minK 以及 maxK 。
//nums 的定界子数组是满足下述条件的一个子数组：
//子数组中的 最小值 等于 minK 。
//子数组中的 最大值 等于 maxK 。
//返回定界子数组的数目。子数组是数组中的一个连续部分。


class Solution {
public:
    long long countSubarrays(vector<int>& nums, int minK, int maxK)
    {
        long long ans = 0;
        int min_k = -1, max_k = -1;  //mink上次出现的位置 maxk上次出现的位置      
        int no = -1;
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] == minK)  min_k = i;
            if (nums[i] == maxK)  max_k = i;
            if (nums[i] > maxK || nums[i] < minK)  no = i;
            if (no < max_k && no < min_k)
            {
                ans += max(min(min_k, max_k) - no, 0);
            }
        }
        return ans;
    }
};